package com.ebo.common.smart.parser;

import cn.hutool.core.lang.RegexPool;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import com.ebo.common.smart.TextHolder;
import com.ebo.common.smart.domain.UserInfo;
import org.junit.platform.commons.util.StringUtils;

import java.util.List;
import java.util.Objects;

/**
 * 电话解析器
 */

/**
 * 电话解析器
 */
public class MobileParser {


    public void parse(UserInfo userInfo, List<String> textList, TextHolder textHolder) {
        for (int i = 0; i < textList.size(); i++) {
            String text = textList.get(i);
            if(Objects.isNull(text)){
                continue;
            }
            String mobile = matchMobile(text);
            //判断length,避免误判特殊格式的座机号,比如 02180392283 里面的 180392283
            if (!StrUtil.isEmpty(mobile) && mobile.length() >= 11 &&  text.indexOf(mobile.substring(0, 2))==0) {

                textList.set(i, textList.get(i).replace(mobile, ""));
                userInfo.setMobile(mobile);
                textHolder.removeText(mobile);
                text = text.replace(mobile,"");
            }
            String tel = matchTel(text);
            if (StrUtil.isEmpty(tel)) {
                continue;
            } else {
                textList.set(i, textList.get(i).replace(tel, ""));
                userInfo.setTel(tel);
                textHolder.removeText(tel);
                text = text.replace(tel,"");
            }
        }
        return;
    }

    /**
     * 匹配手机号码
     *
     * @param text
     * @return
     */
    public String matchMobile(String text) {
//        String MOBILE = "(?:0|86|\\+86)?1[3-9]\\d{9}";
        String MOBILE = "(86-[1][3-9][0-9]{9}-[0-9]{4})|(86[1][3-9][0-9]{9}-[0-9]{4})|([1][3-9][0-9]{9}-[0-9]{4})|(86-[1][3-9][0-9]{9})|(86[1][3-9][0-9]{9})|([1][3-9][0-9]{9})|([1][1-9][-0-9]{4}[-0-9]{7}[-0-9]{5})|([1][1-9][-0-9]{4}[-0-9]{0,7})";
        String mobile = ReUtil.getGroup0(/*RegexPool.MOBILE*/MOBILE, text);
        if (StrUtil.isNotEmpty(mobile)) {
            return mobile;
        }

//        mobile = ReUtil.getGroup0(RegexPool.TEL, text);
//        if (StrUtil.isNotEmpty(mobile)) {
//            return mobile;
//        }

//        mobile = ReUtil.getGroup0(RegexPool.TEL_400_800, text);
//        if (StrUtil.isNotEmpty(mobile)) {
//            return mobile;
//        }
//        mobile = ReUtil.getGroup0(RegexPool.MOBILE_HK, text);
//        if (StrUtil.isNotEmpty(mobile)) {
//            return mobile;
//        }
//        mobile = ReUtil.getGroup0(RegexPool.MOBILE_TW, text);
//        if (StrUtil.isNotEmpty(mobile)) {
//            return mobile;
//        }
        return ReUtil.getGroup0(RegexPool.MOBILE_MO, text);
    }

    /**
     * 匹配手机号码
     *
     * @param text
     * @return
     */
    public String matchTel(String text) {
//        String MOBILE = "(?:0|86|\\+86)?1[3-9]\\d{9}";
//        String TEL = "(([0-9]{3,4}-)[0-9]{7,8})|([0-9]{12})|([0-9]{11})|([0-9]{10})|([0-9]{9})|([0-9]{8})|([0-9]{7})";
        String TEL = "(010|02\\d|0[3-9]\\d{2})-?(\\d{6,8})||(({6,8}))";
//        String TEL_8_7 = "((?:0|852|\\+852)?\\d{8})|((?:0|852|\\+852)?\\d{7})";
        String tel = ReUtil.getGroup0(/*RegexPool.MOBILE*/TEL, text);
        if (StrUtil.isNotEmpty(tel)) {
            return tel;
        }

        tel = ReUtil.getGroup0(RegexPool.TEL, text);
        if (StrUtil.isNotEmpty(tel)) {
            return tel;
        }

        tel = ReUtil.getGroup0(RegexPool.TEL_400_800, text);
        if (StrUtil.isNotEmpty(tel)) {
            return tel;
        }
//        tel = ReUtil.getGroup0(TEL_8_7, text);
//        if (StrUtil.isNotEmpty(tel)) {
//            return tel;
//        }
//        mobile = ReUtil.getGroup0(RegexPool.MOBILE_TW, text);
//        if (StrUtil.isNotEmpty(mobile)) {
//            return mobile;
//        }
        return ReUtil.getGroup0(RegexPool.TEL, text);
    }

}


